package com.huilian.iotbox.admin.dao;

import com.huilian.iotbox.data.dto.DeviceDto;
import com.huilian.iotbox.data.po.Device;
import com.huilian.iotbox.data.po.ExternalDeviceParamValue;
import com.huilian.iotbox.data.vo.DeviceVo;
import com.huilian.iotbox.data.vo.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

@Mapper
public interface DeviceDao {
    DeviceVo findOneDeviceById(UserInfo userInfo, @Param("id") Integer id);

    DeviceVo findOneDeviceByDeviceNo(String deviceNo);

    List<DeviceVo> findDevice(DeviceDto deviceDto);

    Integer updateDeviceParamsByDeviceNo(DeviceDto deviceDto);

    Integer updateDeviceById(DeviceDto deviceDto);

    List<DeviceVo> findDeviceList(DeviceDto deviceDto);

    Device findResidueNewDeviceToDay();

    void batchInsert(@Param(value = "list") List<Device> list);

    DeviceVo findDeviceStatistic(DeviceDto deviceDto);

    void updateDeviceByIdToList(@Param(value = "list") List<DeviceVo> list);


    /**
     * 统计设备占比
     *
     * @param deviceDto
     * @return
     */
    List<DeviceVo> findDeviceCount(DeviceDto deviceDto);

    /**
     * 统计昨天,本月,上月的新增设备数
     *
     * @param deviceDto
     * @return
     */
    DeviceVo findNewDeviceCount(DeviceDto deviceDto);

    /**
     * 统计设备无交易个数
     *
     * @param set
     * @return
     */
    Integer findSetDeviceNoTrade(@Param("agencyId") Integer agencyId, @Param("set") Set<String> set);

    List<DeviceVo> findDistributionDevice(DeviceDto deviceDto);

    List<Device> findAllDeviceByCondition(DeviceDto deviceDto);

    List<DeviceVo> findAllDeviceByNoHeart(int time);


    /**
     * 查询所有设备数据
     *
     * @return
     */
    List<DeviceVo> findDeviceAll(@Param("heartbeatTime") String heartbeatTime);

    Integer insert(@Param("device") Device device);

    /**
     * 查询设备最大的设备号
     *
     * @return
     */
    String findDeviceNoMax();

    Integer updateDeviceByDeviceNo(Device device);

    DeviceVo findDeviceByDeviceNo(String newDeviceNo);


    Integer updateDeviceRemarkNameById(DeviceDto remarkNameDeviceDto);

    /**
     * 请勿调用该sql,否则你会体验飞翔的感觉
     */
    Integer updateDeviceTotalTransactionAmount(DeviceVo deviceVo);

    DeviceVo findOneDeviceByCondition(DeviceDto dto);

    DeviceVo findOneDeviceByNotAllocated(DeviceDto dto);

    List<DeviceVo> findDeviceNoByUser(DeviceDto deviceDto);

    Device findDeviceByUserIdAndDeviceNo(@Param("deviceNo") String deviceNo);

    List<DeviceVo> findAllDeviceByIdAndPermission(DeviceDto deviceDto);

    DeviceVo findOneDevicePwd(String deviceNo);

    Integer updateVendingParameter(Device device);

    List<DeviceVo> findSectionDeviceNo(@Param("startNo") String startNo, @Param("endNo") String endNo);

    DeviceVo findOneDeviceByDeviceNoAndPermission(DeviceDto dto);

    List<DeviceVo> findDeviceByAgencyId(@Param("deviceTypeIdArray")Integer[] deviceTypeIdList, @Param("agencyIdArray") Integer[] agencyIdList);
}
